home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / dbms_mag / 9107 / embay_c / ded.cpp < prev    next >
C/C++ Source or Header  |  1991-03-13  |  3KB  |  130 lines

  1. // ==  ded.cpp === member functions for data-editor objects =========
  2. //                 Copyright 1991 Wes Peterson
  3.  
  4. #include <dos.h>
  5. #include "eb_edit.h"
  6.  
  7. // This constructor creates a ded object for character strings
  8.  
  9. ded::ded(int r, int c, char *dta, char *pct, char *msk, char *flg)
  10. {
  11.     data = (void *) dta;
  12.     dtype = DTYPSTR;
  13.     row = r;
  14.     col = c;
  15.     fld_width = 0;
  16.     picture = pct;
  17.     mask = msk;
  18.     flags = flg;
  19. }
  20.  
  21.  
  22. // This constructor creates a ded object for long integers
  23.  
  24. ded::ded(int r, int c, long *dta, char *pct, char *msk, char *flg)
  25. {
  26.     data = (void *) dta;
  27.     dtype = DTYPLNG;
  28.     row = r;
  29.     col = c;
  30.     fld_width = 0;
  31.     picture = pct;
  32.     mask = msk;
  33.     flags = flg;
  34. }
  35.  
  36.  
  37. // This constructor creates a ded object for field objects
  38.  
  39. ded::ded(int r, int c, field *f, char *pct, char *msk, char *flg)
  40. {
  41.     data = f->data;
  42.     dtype = f->fldarg.fldtype;
  43.     row = r;
  44.     col = c;
  45.     fld_width = 0;
  46.     picture = f->fldarg.fldpict;
  47.     mask = f->fldarg.fldmask;
  48.     flags = f->fldarg.fldflag;
  49. }
  50.  
  51. void ded::draw_field(int attr)
  52. {
  53.     textattr(attr);
  54.     int room_left = ed->fldw;
  55.     char *disp = &(ed->buffer[ed->begx]);
  56.     gotoxy(col, row);
  57.     while(*disp && room_left)    {
  58.         putch((char) *disp++);
  59.         room_left--;
  60.         }
  61.     gotoxy(col + ed->curpos, row);
  62. }
  63.  
  64. void ded::display(int attr)
  65. {
  66.     textattr(attr);
  67.     ed = FmtEditDataInit(dtype, picture, mask, flags, data);
  68.     if(fld_width)
  69.         ed->fldw = fld_width;
  70.     draw_field(attr);
  71.     FmtEditClose(ed, data); 
  72. }
  73.  
  74. int ded::edit(int g_attr, int cg_attr)
  75. {
  76.     int key, status, go_on = 1;
  77.  
  78.     ed = FmtEditDataInit(dtype, picture, mask, flags, data);
  79.     if(fld_width)
  80.         ed->fldw = fld_width;
  81.     draw_field(cg_attr);
  82.  
  83.     while(go_on)    {
  84.         key = GetKey();
  85.             if( (key == KPGUP) || (key == KPGDN) )    {
  86.                 status = key;
  87.                 goto DONE_EDITING;
  88.                 }
  89.                 
  90.         status = FmtEditKeystroke(ed, key);
  91.  
  92.         switch(status)    {
  93.             case     FEDITBEEP:
  94.                 beep(); break;
  95.             case     FEDITDONE:
  96.             case    FEDITCAN:
  97.             case    FEDITADV:
  98.             case    FEDITADVL:
  99.             case    FEDITADVR:
  100.             case    FEDITADVU:
  101.             case    FEDITADVD:
  102.                 go_on = 0; break;
  103.             default:
  104.                 break;
  105.             }
  106.         draw_field(cg_attr);
  107.         }
  108.     DONE_EDITING:
  109.         draw_field(g_attr);
  110.         FmtEditClose(ed, data);
  111.         return(status);
  112. }
  113.  
  114. int GetKey(void)
  115. {
  116.     int    key;
  117.  
  118.     key = getch();
  119.     if(!key)
  120.         key = getch() + 0x100;
  121.     return(key);
  122. }
  123.  
  124. void beep(void)
  125. {
  126.     sound(800);
  127.     delay(200);
  128.     nosound();
  129. }
  130.